#include "regist.h"

head_node *inituser() // 用户数据申请表头
{
    head_node *p = (head_node *)malloc(sizeof(head_node));
    if (p == NULL)
    {
        printf("申请表头失败\n");
        return NULL;
    }
    unode *q = (unode *)malloc(sizeof(unode));
    if (q == NULL)
    {
        printf("申请节点失败\n");
        return NULL;
    }
    p->head = q;
    return p;
}

void insertuser(int num) // 用户数据插入
{
    if (num == 1)
    {

        user data = {0};
        printf("请输入用户名\n");
        scanf("%s", data.name);
        printf("请输入密码\n");
        scanf("%s", data.passwd);
        printf("请输入用户id(1(管理员)or2(普通用户))\n");
        scanf("%d", &data.IDcard);
        FILE *fp = fopen("用户信息.txt", "a");
        fprintf(fp, "%s\t%s\t%d\n", data.name, data.passwd, data.IDcard);
        fclose(fp);
        return;
    }
    if (num == 2)
    {
        user data = {0};
        printf("请输入用户名\n");
        scanf("%s", data.name);
        printf("请输入密码\n");
        scanf("%s", data.passwd);
        data.IDcard = 2;
        FILE *fp = fopen("用户信息.txt", "a");
        fprintf(fp, "%s\t%s\t%d\n", data.name, data.passwd, data.IDcard);
        fclose(fp);
        return;
    }
}

head_node *readuser() // 从文件中读取用户信息
{
    head_node *p = inituser();
    unode *L = p->head;
    p->head = L;
    FILE *fp = fopen("用户信息.txt", "r");
    do
    {
        L->next = (unode *)malloc(sizeof(unode));
        L->next->next = NULL;
        L = L->next;
        fscanf(fp, "%s\t%s\t%d\n", L->userm.name, L->userm.passwd, &L->userm.IDcard);
    } while (!feof(fp));
    if (!feof(fp))
    {
        printf("读取失败\n");
        return NULL;
    }
    L->next = NULL;
    fclose(fp);
    return p;
}

void priuser(head_node *p) // 打印用户信息文件中数据
{
    p = readuser();
    unode *q = p->head;
    if (p == NULL || q == NULL || q->next == NULL)
    {
        printf("没有用户信息\n");
    }
    printf("用户名\t密码\tid\n");
    while (q->next != NULL)
    {
        q = q->next;
        printf("%s\t%s\t%d\n", q->userm.name, q->userm.passwd, q->userm.IDcard);
    }
    return;
}

void deletuser(head_node *p) // 删除单行用户信息文件中数据
{
    p = readuser();
    unode *q = p->head;
    priuser(p);
    printf("请输入要删除的用户名\n");
    char name[16];
    scanf("%s", name);
    while (q->next != NULL)
    {
        if (strcmp(q->next->userm.name, name) == 0)
        {
            unode *temp = q->next;
            q->next = q->next->next;
            free(temp);
            break;
        }
        q = q->next;
    }
    q = p->head;
    FILE *fp = fopen("用户信息.txt", "w");
    while (q->next != NULL)
    {
        q = q->next;
        fprintf(fp, "%s\t%s\t%d\n", q->userm.name, q->userm.passwd, q->userm.IDcard);
    }
    fclose(fp);
    priuser(p);
    return;
}

unode *login() // 登录判断返回行信息
{
    head_node *p = readuser();
    char name[16];
    char passwd[64];
    printf("请输入用户名：");
    scanf("%s", name);
    printf("请输入密码：");
    scanf("%s", passwd);
    unode *q = p->head;
    while (q->next != NULL)
    {
        q = q->next;
        if (!strcmp(q->userm.name, name) && !strcmp(q->userm.passwd, passwd))
        {
            printf("登录成功！\n");
            return q;
        }
    }
    printf("登录失败！\n");
    return 0;
}

void systm() // 登录系统
{
    int num = 0;
    int flag = 1;
    unode *user = NULL;
    while (flag)
    {
        printf("-------------------------------------------------------------------------------------------------------\n");
        printf("|*****************************************************************************************************|\n");
        printf("||                                         欢迎使用航班管理系统                                      ||\n");
        printf("|*****************************************************************************************************|\n");
        printf("||                                                                                                   ||\n");
        printf("||                                                                                                   ||\n");
        printf("||                                            【1、登录】                                            ||\n");
        printf("||                                            【2、注册】                                            ||\n");
        printf("||                                            【3、退出】                                            ||\n");
        printf("||                                                                                                   ||\n");
        printf("|*****************************************************************************************************|\n");
        printf("|*****************************************************************************************************|\n");
        printf("-------------------------------------------------------------------------------------------------------\n");
        printf("请输入您的选择：\n");
        scanf("%d", &num);
        switch (num)
        {
        case 1:
            user = login();
            if (user->userm.IDcard == 1)
            {
                flag = admin();
            }
            else if (user->userm.IDcard == 2)
            {
                flag = userinterface(user);
            }
            else flag = 0;

            break;
        case 2:
            insertuser(2);
            break;
        case 3:
            flag = 0;
            break;
        default:
            break;
        }
    }
}

int admin() // 管理员界面
{
    int num = 0;
    int flag = 1;
    int flag1 = 1;
    while (flag1)
    {
        printf("*****************************************************************************************************\n");
        printf("|                                         欢迎使用航班管理系统(管理员)                              |\n");
        printf("*****************************************************************************************************\n");
        printf("|                                                                                                   |\n");
        printf("|                    【1、增加航班信息】                     【2、删除航班信息】                    |\n");
        printf("|                    【3、查看航班信息】                     【4、更改登录信息】                    |\n");
        printf("|                    【5、退出系统】                         【6、返回登录】                        |\n");
        printf("|                                                                                                   |\n");
        printf("|                                                                                                   |\n");
        printf("*****************************************************************************************************\n");
        printf("*****************************************************************************************************\n");
        printf("请输入您的选择：\n");
        scanf("%d", &num);
        switch (num)
        {
        case 1:
            Inputflydata();
            break;
        case 2:
            deletoutflydata(readfly());
            break;
        case 3:
            sort(readfly());
            break;
        case 4:
            deletuser(inituser());
            printf("添加用户信息\n");
            insertuser(1);
            break;
        case 5:
            flag = 0;
            flag1 = 0;
            return flag;
            break;
            case 6:
            flag1 = 0;
            return flag;
            break;
        default:
            break;
        }
    }
}

int userinterface(unode *user) // 用户界面
{
    int num = 0;
    int flag = 1;
    int flag1 = 1;
    head *p = NULL;
    while (flag1)
    {
        printf("*****************************************************************************************************\n");
        printf("|                                    欢迎使用航班管理系统(乘客)                                     |\n");
        printf("*****************************************************************************************************\n");
        printf("|                                                                                                   |\n");
        printf("|                    【1、购票】                           【2、退票】                              |\n");
        printf("|                    【3、查看航班信息】                   【4、查看个人中心】                      |\n");
        printf("|                    【5、退出系统】                       【6、返回登录】                          |\n");
        printf("|                                                                                                   |\n");
        printf("|                                                                                                   |\n");
        printf("*****************************************************************************************************\n");
        printf("*****************************************************************************************************\n");
        printf("请输入您的选择：\n");
        scanf("%d", &num);
        switch (num)
        {
        case 1:
            p = readfly();
            changeflytickt(p, user, 1);
            break;
        case 2:
            p = readfly();
            changeflytickt(p, user, 2);
            break;
        case 3:
            sort(readfly());
            break;
        case 4:
            ptf(readtickuser(user));
            break;
        case 5:
            flag = 0;
            flag1 =0;
            return flag;
            break;
            case 6:
            flag1 = 0;
            return flag;
            break;
        default:
            break;
        }
    }
}
